iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0

Pod

在EKS的宇宙裡,AWS會負責去管理Master Node並且維護,而我們可以access Worker Node,Worker Node對比AWS的服務則為EC2,若有Key就可以直接access到擁有public ip的EC2,或是在建置Cluster的時候,若有啟用public Endpoint,就可以透過網路使用kubectl執行API access pod。

Pod則是EKS裡運作服務的最小單位,而應用程式可以在Container裡執行並在Pod底下運行一個甚至多個來完成服務,且Container之間可以互相使用資源。

使用EKS建立cluster的時候,需要注意instanceType,會決定Node裡面的Pod最高上限值

若Pod達到上限值,可以將不必要的Pod刪除,或增加Node數量,來提高Pod的可用空間

Pod上限計算公式
https://chart.googleapis.com/chart?cht=tx&chl=(Max%20ENI)%5C%2C%20%5Ctimes%20%5C%2C(Private%20IPv4_p_e_r_E_N_I%5C%2C%20-%5C%2C%201)%20%5C%2C%2B%20%5C%2C2
t3.micro: MaxENI = 2, PrivateIPv4 per ENI = 2
https://chart.googleapis.com/chart?cht=tx&chl=%5CRightarrow 2 * (2 – 1) + 2 = 4 pods
t3.small: MaxENI = 3, PrivateIPv4 per ENI = 4
https://chart.googleapis.com/chart?cht=tx&chl=%5CRightarrow 3 * (4 – 1) + 2 = 11 pods

ENI資訊參考:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI

以下會撰寫一個Pod描述檔,並做說明解釋

apiVersion: v1
kind: Pod
metadata:
  name: myappforfew
  labels:
    name: myappforfew
spec:
  containers:
  - name: myappforfew
    image: johnson860312/awswebdb
    resources:
      limits:
        memory: "512Mi"
        cpu: "512m"
      requests:
        memory: "128Mi"
        cpu: "256m"
    ports:
      - containerPort: 80
  nodeSelector:
    name:  fewpods
---
apiVersion: v1
kind: Pod
metadata:
  name: myappformore
  labels:
    name: myappformore
spec:
  containers:
  - name: myappformore
    image: johnson860312/awswebdb
    resources:
      limits:
        memory: "512Mi"
        cpu: "512m"
      requests:
        memory: "128Mi"
        cpu: "256m"
    ports:
      - containerPort: 80
  nodeSelector:
    name:  morepods

metadata:

  • name: 給予這個物件的名字。在使用kubectl可以明確指出Pod
  • labels: 給予物件一個標籤。可以歸類同類型的Pod,並使用selector指定

spec: 定義Pod的規格。需要怎樣的Container
resources: 分配CPU/Memory資源
limits: 可以分別定義CPU/Memory的上限值
requests: 直接分配固定的CPU/Memory資源
ports: 透過browser可以訪問的port
nodeSelector: 將現在的Pod指定到想要的Node上。

Node規格:
fewpods => t3.micro (4 Pods)
morepods => t3.small (11 Pods)

透過YAML建立Pod

kubectl apply -f pod2.yaml

https://ithelp.ithome.com.tw/upload/images/20211006/20140172TwwjhRKEjp.png
查看目前的Pod
kubectl get pods -n [namespaces] => 若沒有特別定義namespaces,則為default
https://ithelp.ithome.com.tw/upload/images/20211006/20140172bntNFkWuE6.png
查看Pod的資訊
kubectl describe pod myappforfew -n [namespaces]
https://ithelp.ithome.com.tw/upload/images/20211006/20140172T7nnyEbLbr.png
因為達到一個Node所擁有Pod的上限,所以狀態為Pending

透過kubectl將local端的port mapping到EKS
kubectl port-forward [pod] [local port]:[container port]
https://ithelp.ithome.com.tw/upload/images/20211006/20140172jUY9soNZsG.png
https://ithelp.ithome.com.tw/upload/images/20211006/201401726gwIdfMhvr.png
善用Lens,可以快速查看EKS Cluster上的所有資訊
https://ithelp.ithome.com.tw/upload/images/20211006/20140172nLYlsM9hya.png
刪除資源
kubectl delete -f [yaml file]
https://ithelp.ithome.com.tw/upload/images/20211006/20140172AqmPhbfMFq.png
之後的EKS操作都會使用t3.small,因為有足夠多的Pod資源可以使用,且筆者會使用Lens的Metrics Stack,所以會占用一些Pod的空間


上一篇
成為海賊王的試煉就此展開
下一篇
如果Pod應用程式出事情的話,還是做一下健康檢查
系列文
從煉獄走到天堂的AWS DevOps 工具及應用開發大進擊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言